Authorization হল সেই প্রক্রিয়া যার মাধ্যমে নিশ্চিত করা হয় যে কোন ব্যবহারকারী কোন রিসোর্স বা অ্যাকশনে অ্যাক্সেস করার অনুমতি পাবে। এটি Spring Security-এর একটি গুরুত্বপূর্ণ দিক।
Spring Security Authorization মূলত Authentication-এর পরে কাজ করে। যখন ব্যবহারকারী সঠিকভাবে authenticate হয়, তখন তার role বা permission যাচাই করে সিদ্ধান্ত নেওয়া হয় যে সে নির্দিষ্ট রিসোর্স অ্যাক্সেস করতে পারবে কি না।
Authorization এর কাজ করার ধাপ
- Authentication (ব্যবহারকারী সঠিক কিনা তা যাচাই):
ব্যবহারকারীর পরিচয় যাচাই করা হয় (যেমন ইউজারনেম এবং পাসওয়ার্ড)। - Authorization (ব্যবহারকারীর অধিকার যাচাই):
যাচাই করা হয় যে ব্যবহারকারী কোন রিসোর্সে প্রবেশ করতে পারবে এবং কী অ্যাকশন (যেমন read/write/delete) করতে পারবে।
Spring Security-তে Authorization এর উপায়
Spring Security-তে Authorization কয়েকটি পদ্ধতিতে করা যায়:
1. URL-Based Authorization
- এই পদ্ধতিতে নির্দিষ্ট URL বা endpoint-এর জন্য অ্যাক্সেস নিয়ন্ত্রণ প্রয়োগ করা হয়।
উদাহরণ:
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") // শুধুমাত্র ADMIN রোল অ্যাক্সেস পাবে .antMatchers("/user/**").hasAnyRole("USER", "ADMIN") // USER বা ADMIN রোল পাবে .antMatchers("/public/**").permitAll() // সবাই অ্যাক্সেস পাবে .anyRequest().authenticated() // অন্যসব রিসোর্সের জন্য authentication প্রয়োজন .and() .formLogin(); }
2. Role-Based Authorization
- এই পদ্ধতিতে ব্যবহারকারীর নির্দিষ্ট role (যেমন:
ADMIN,USER) এর উপর ভিত্তি করে authorization নিয়ন্ত্রণ করা হয়। উদাহরণ:
@PreAuthorize("hasRole('ADMIN')") public String adminAccess() { return "This is an admin-only resource."; }
3. Method-Level Authorization
- Spring Security এর মাধ্যমে মেথড-লেভেলে authorization নিয়ন্ত্রণ করা যায়।
- এটি সাধারণত
@PreAuthorize,@PostAuthorize,@Securedবা@RolesAllowedঅ্যানোটেশন ব্যবহার করে করা হয়। উদাহরণ:
@Service public class MyService { @PreAuthorize("hasRole('ADMIN')") public void performAdminTask() { // শুধুমাত্র ADMIN রোল সম্পন্ন করতে পারবে } @PreAuthorize("hasAuthority('READ_PRIVILEGE')") public void readData() { // নির্দিষ্ট প্রিভিলেজ যাচাই } }
4. Custom Authorization
- Custom logic লিখে authorization নিয়ন্ত্রণ করা যায়।
উদাহরণ:
@Component("customPermissionEvaluator") public class CustomPermissionEvaluator implements PermissionEvaluator { @Override public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) { // Custom logic return true; // বা false } @Override public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) { // Custom logic return true; // বা false } }
5. Access Control Expressions
- Spring Security একটি শক্তিশালী Access Control Expressions সাপোর্ট করে।
উদাহরণ:
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/**").access("hasRole('USER') and hasIpAddress('192.168.1.0/24')") .anyRequest().authenticated(); }
Authorization এর প্রকারভেদ
Spring Security-তে Authorization বিভিন্নভাবে করা যায়। এর প্রকারভেদ হলো:
1. Role-Based Access Control (RBAC):
- RBAC সিস্টেমে, ব্যবহারকারীর একটি নির্দিষ্ট role থাকে। রোল অনুযায়ী ব্যবহারকারীকে রিসোর্সে অ্যাক্সেস দেওয়া হয়।
উদাহরণ:
http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/user/**").hasAnyRole("USER", "ADMIN");
2. Attribute-Based Access Control (ABAC):
- এই পদ্ধতিতে নির্দিষ্ট অ্যাট্রিবিউট বা প্রোপার্টির উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করা হয়।
উদাহরণ:
@PreAuthorize("#user.username == authentication.name") public void updateUserProfile(User user) { // শুধুমাত্র ব্যবহারকারী নিজের প্রোফাইল আপডেট করতে পারবে }
3. Permission-Based Access Control:
- এখানে Role-এর পরিবর্তে নির্দিষ্ট permission (যেমন:
READ_PRIVILEGE,WRITE_PRIVILEGE) যাচাই করা হয়। উদাহরণ:
@PreAuthorize("hasAuthority('READ_PRIVILEGE')") public void readData() { // নির্দিষ্ট প্রিভিলেজ যাচাই }
4. Time-Based Authorization:
- নির্দিষ্ট সময়ের উপর ভিত্তি করে অ্যাক্সেস কন্ট্রোল করা হয়।
উদাহরণ:
@PreAuthorize("T(java.time.LocalTime).now().isBefore(T(java.time.LocalTime).parse('18:00'))") public String accessResource() { return "Resource accessible before 6 PM"; }
Authentication এবং Authorization এর পার্থক্য
| বিষয় | Authentication | Authorization |
|---|---|---|
| উদ্দেশ্য | ব্যবহারকারীর পরিচয় যাচাই করা। | ব্যবহারকারী কি অ্যাক্সেস করতে পারবে তা যাচাই। |
| কার্যপ্রণালী | ইউজারনেম, পাসওয়ার্ড, টোকেন যাচাই। | রোল, প্রিভিলেজ বা রিসোর্স যাচাই। |
| সময় | সর্বপ্রথম ঘটে। | Authentication সফল হলে ঘটে। |
| উদাহরণ | "আপনি কে?" | "আপনি এটা অ্যাক্সেস করতে পারেন?" |
Spring Security-তে Authorization এর গুরুত্বপূর্ণ টিপস
- Role Naming:
রোলের নাম সাধারণতROLE_দিয়ে শুরু হওয়া উচিত। উদাহরণ:ROLE_ADMIN,ROLE_USER। - Password Encoding:
পাসওয়ার্ড এনক্রিপ্ট করুন।BCryptPasswordEncoderব্যবহার করুন। - Secure Default Configuration:
ডিফল্ট কনফিগারেশন যতটা সম্ভব সুরক্ষিত রাখুন। - Method Level Security:
মেথড লেভেলে সিকিউরিটি প্রয়োগ করতে@EnableGlobalMethodSecurity(prePostEnabled = true)ব্যবহার করুন। Custom Access Denied Handler:
কাস্টম Access Denied Page তৈরি করুন।http.exceptionHandling() .accessDeniedPage("/access-denied");
Spring Security-এর Authorization এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে আরো নিরাপদ করতে পারবেন। উপরোক্ত প্রকারভেদ এবং উদাহরণগুলো আপনাকে প্রয়োজন অনুযায়ী সঠিক পদ্ধতি নির্বাচন করতে সাহায্য করবে।
Read more